package com.jat.algorithms.sort;

import java.util.Arrays;

/**
 * @author Jat C C J
 * @description: 选择排序
 * @date 2021-9-2814:47
 */
public class SelectSort {

    public static void main(String[] args) {
        int[] array = {3,1,5,7,2,4};
        select(array);
        System.out.println(Arrays.toString(array));
    }

    /**
     * 思路：
     * 遍历整个序列，将最小的数放在前面
     * 遍历剩下的序列，将最小的放在前面
     * 重复第二步，直到只剩下一个数
     *
     * 伪代码
     * 循环次数，记录当前数字和当前位置
     * 将当前位置后面所有的数和当前数进行对比，小数赋值给可以，并记住小数的数
     * 对比完成后，将最小的值和第一个数的值交换
     * 重复2、3步
     * @param a
     */
    private static void select(int[] a){
        for (int i = 0; i < a.length; i++) {
            //记录当前位置和值
            int min = i;
            int minNum = a[i];
            for (int j = i+1 ; j < a.length; j++) {
                //对比当前值是否是最小，不是的话则找到最小值的位置和更新最小值
                if (minNum>a[j]){
                    min = j;
                    minNum = a[j];
                }
            }
            //如果最小值的位置不是当前位置，则交换位置
            if (min != i){
                int indexNum = a[i];
                a[i] = a[min];
                a[min] = indexNum;
            }
        }
    }
}
